package com.party.orders.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.party.alipay.AlipayRefundVO;
import com.party.alipay.MyAlipayUtils;
import com.party.domain.Admin;
import com.party.domain.Refund;
import com.party.dto.Response;
import com.party.orders.service.RefundService;
import com.party.tool.OrdersNumUtils;

/**
 * 
 * @author Caizhf
 * @date 2017年8月15日下午2:54:01
 * @version v.0.1
 * @email 1115054416@qq.com
 *
 *        <p>
 * 		Description:退款
 *        </p>
 *
 */
@RestController
@RequestMapping("/refund")
public class RefundController {
	@Autowired
	private RefundService service;

	/**
	 * 查询退款请求列表
	 * 
	 * @param aid
	 *            aid（管理员）参数说明： 如果传入的aid>0 : 就是查询该id号码管理员的退款请求列表（超级管理员接口）； 传入null :
	 *              就是查当前session的管理员（商家接口）； 如果aid<0（任意负数）: 那么就是查询所有的退款请求(超级管理员接口)；
	 * 
	 * @param caid
	 * 			  caid(流水账id)参数说明：
	 * 					如果传入，就是根据该流水账查询退款列表
	 * 					如果没有传入，请忽略
	 * 			   
	 * @param pageSize
	 * @param pageNum
	 * @return
	 */
	@RequestMapping("/list/{pageNum}")
	public Response list(Integer aid, Integer caid,
			@RequestParam("pageSize") int pageSize, @PathVariable int pageNum) {
		// 如果aid为空，就查当前session用户的
		if (aid == null) {
			Admin a = (Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
			aid = a.getAid();
		} else if (aid < 0)
			aid = null;

		return Response.success(service.list(aid, caid, pageSize, pageNum));
	}

	/**
	 * 根据id查询
	 * 
	 * @param rfid
	 * @return
	 */
	@RequestMapping("/get/{rfid}")
	public Response get(@PathVariable int rfid) {
		return Response.success(service.findById(rfid));
	}

	@RequestMapping("/get_sp/{spid}")
	public Response getBySpid(@PathVariable int spid){
		return Response.success(service.findByShopCartId(spid));
	}
	
	/**
	 * 执行退款	127.0.0.1:8090/refund/do_ref/*?isAgree=*
	 * 
	 * @param rfid			所需要退款的id号码
	 * @param isAgree		是否同意退款，true为同意，false为不同意
	 * @param refuseReason  如果不同意退款，请传入这个参数说明不同意的原因；
	 * 						如果同意，请不要传入该参数
	 * @return
	 */
	@RequestMapping("/do_ref/{rfid}")
	public Response doRefund(@PathVariable int rfid,@RequestParam("isAgree")boolean isAgree,String refuseReason) {
		// 考虑一个问题：如果退款成功，业务操作却执行异常，如何解决（是否支持夸服务器事务处理）？
		// 执行退款操作
		service.execute(rfid,isAgree,refuseReason);
		return Response.success();
	}
	
	/**
	 * 删除（慎用）
	 * 
	 * @param rfid
	 * @return
	 */
	@RequestMapping("/del/{rfid}")
	public Response delete(@PathVariable int rfid){
		service.delete(rfid);
		return Response.success();
	}
	
	/**
	 * 修改
	 * @param userRefundReason	用户退款原因
	 * @param refuseReason		退款拒绝原因
	 * @param refundFee			退款金额
	 * @return
	 */
	@RequestMapping("/update")
	public Response update(String userRefundReason, String refuseReason, String refundFee,int rfid){
		service.update(userRefundReason,refuseReason,refundFee,rfid);
		return Response.success();
	}
	
}
